from database import db_store

@db_store.auto_session
def add_catelog(*args, **kw):
    return __add_catelog

def __add_catelog(session, catelog_info):
    session.add(db_store.LLM_Catelog(**catelog_info))

@db_store.auto_session
def add_catelog_func(*args, **kw):
    return __add_catelog_func

def __add_catelog_func(session, catelog_info):
    session.add(db_store.LLM_Catelog_Func(**catelog_info))

@db_store.auto_session
def add_code_analysis(*args, **kw):
    return __add_code_analysis

def __add_code_analysis(session, catelog_info):
    session.add(db_store.LLM_Catelog_Code_Analysis(**catelog_info))

@db_store.auto_session
def add_code_exec_analysis(*args, **kw):
    return __add_code_exec_analysis

def __add_code_exec_analysis(session, catelog_info):
    session.add(db_store.LLM_Catelog_Code_Exec_Analysis(**catelog_info))

@db_store.auto_session
def get_catelog_list(*args, **kw):
    return __get_catelog_list

def __get_catelog_list(session, app_uuid):
    catelog_obj_list = session.query(db_store.LLM_Catelog).filter(db_store.LLM_Catelog.uuid==app_uuid).order_by(db_store.LLM_Catelog.time.asc()).all()
    return [{"role": catelog_obj.role, "content": catelog_obj.content, "time": catelog_obj.time} for catelog_obj in catelog_obj_list]

@db_store.auto_session
def get_catelog_code_exec_analysis_list(*args, **kw):
    return __get_catelog_code_exec_analysis_list

def __get_catelog_code_exec_analysis_list(session, app_uuid):
    catelog_obj_list = session.query(db_store.LLM_Catelog_Code_Exec_Analysis).filter(db_store.LLM_Catelog_Code_Exec_Analysis.uuid==app_uuid).order_by(db_store.LLM_Catelog_Code_Exec_Analysis.time.asc()).all()
    return [{"role": catelog_obj.role, "content": catelog_obj.content, "time": catelog_obj.time} for catelog_obj in catelog_obj_list]

@db_store.auto_session
def get_catelog_code_analysis_list(*args, **kw):
    return __get_catelog_code_analysis_list

def __get_catelog_code_analysis_list(session, app_uuid):
    catelog_obj_list = session.query(db_store.LLM_Catelog_Code_Analysis).filter(db_store.LLM_Catelog_Code_Analysis.uuid==app_uuid).order_by(db_store.LLM_Catelog_Code_Analysis.time.asc()).all()
    return [{"role": catelog_obj.role, "content": catelog_obj.content, "time": catelog_obj.time} for catelog_obj in catelog_obj_list]

@db_store.auto_session
def get_catelog_list_func(*args, **kw):
    return __get_catelog_list_func

def __get_catelog_list_func(session, app_uuid, func_name):
    catelog_obj_list = session.query(
        db_store.LLM_Catelog_Func
        ).filter(
            db_store.LLM_Catelog_Func.uuid==app_uuid,
            db_store.LLM_Catelog_Func.func_name==func_name,
            ).order_by(db_store.LLM_Catelog_Func.time.asc()).all()
    return [{"role": catelog_obj.role, "content": catelog_obj.content, "time": catelog_obj.time} for catelog_obj in catelog_obj_list]
